In [2]:
import pandas as pd
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
%matplotlib inline
import cufflinks as cf
from plotly.offline import iplot, init_notebook_mode
init_notebook_mode(connected=True)
cf.go_offline(connected=True)

# Set global theme
cf.set_config_file(world_readable=True, theme='solar')

NEOS¶

Nos centramos en los NEOS clasificados por la NASA, los cuáles son aquellos cuya distancia máxima de aproximación es menor a 1.3 au. En concreto, dentro de los NEOS, extraemos aquellos datos de asteroides, con una clasificación de 0.02 distancia au, y registro desde 1900 hasta 2200

Como hipótesis principal, planteamos que a medida que avanza el tiempo, los registros de los NEOS serán mayores, gracias al avance en técnicas y tecnologías que van desarrollándose, teniendo cada vez más conocimiento acerca de estos cuerpos.

La primera tabla agrupa todo el dataset registrado por la NASA, siendo este un total de 205686, pero con la limpieza de datos, se quedarán en 193833 asteroides. Con estos datos, mostraremos todo el conjunto de datos que vaya desde 1900 a 2200 para tener una conceptualización de las características de los asteroides. Si vemos las gráficas (en el final), observamos que aquellos que tienen mayor diámetro son también los que mayor velocidad tienen, pudiendo ser por la masa del cuerpo que ejerza mayor velocidad, o bien por características propias de su órbita (no centrado en este estudio). También hay que destacar la variable rareza, la cual se observa que converge con el diámetro, a mayor diámetro más nivel de rareza tiene, lo cual viene dado por una escala de 0 a 6, siendo 0 lo más habitual, donde se estima que para un cuerpo con x características, tiene una media de 100 por año, es decir, se observan mínimo 100 cuerpos a lo largo de 1 año con las mismas características, y 6 tiene una estimación de 1 cada 7500 años. En este caso tenemos el caso de apophis, un cuerpo que aproximadamente cada 15 - 19 años tiene una aproximación cercana a la Tierra, y en concreto, para su aproximación en 2029 le dan una escala 6 de rareza, ya que su proximidad es muy inusual de 0.00025 au, lo que equivale a 0,097 LD, distancia a la Luna, es decir, estará muy próximo a la Tierra, más cercano incluso que la Luna, y su tamaño de 190 m. hacen que sea un hecho histórico y digno de catalogarlo con esa rareza, aunque según la tabla neo risk, donde se extraen aquellos neos considerados potencialmente peligrosos para la NASA, no se registra Apophis.

Una de las hipótesis que había estipulado para este proyecto era que, ya que a medida que avanzamos en el tiempo, debe de ir aumentando los registros de asteroides, el número de observaciones en la primera mitad del siglo XX serán la de objetos de mayor diámetro, más fáciles con la tecnología de entonces, y para finales del siglo XX, entrando casi en los 2000, debería de verse que los asteroides catalogados son más pequeños, ya que podemos observarlos con nuevas técnicas que han ido desarrollándose, y esto hará un crecimiento exponencial de los descubrimientos, y a su vez dotará de riqueza de datos como las características de los asteroides, lo cual puede ser interesante no sólo para ver la alerta que podría surgir si observamos asteroides peligrosos, sino también por la composición del mismo, ya que a día de hoy solo se estipula en base a la proyección de luminosidad, pero si avanzamos en detectar los tipos de materiales con los que están formados los objetos que están entre la Tierra y la Luna, se podría crear un proceso de extracción de los mismos.

Efectivamente, según las gráficas, a medida que avanzamos en el tiempo, el número de visualizaciones de objetos grandes se ve más pronunciado en la primera mitad de siglo, de 1900 a 1961, y de la siguiente gráfica, de 1962 a 2022 se ve que hay una mayor proliferación de asteroides pequeños, siendo incluso su media de tamaño menor que los observados en la primera mitad, por lo que se corrobora la hipótesis de que a la vez que avanza el tiempo observamos más asteroides y asteroides cada vez más pequeños, dándonos cada vez más una proyección de lo que ocurre, y a medida que vayamos avanzando, junto con la Inteligencia Artificial, se podrá obtener datos más reales.

Para el segundo dataset, extraemos aquellos que la NASA considera como potencialmente peligrosos, siendo 26, que va desde 2024 hasta 2880, estos datos varían continuamente.

Como impresión final, después de leer documentación al respecto y de trabajar con los datos, he de destacar la importancia que ejerce la magnitud de estos cuerpos, ya que es la propiedad con la que empieza a desarrollarse todas las variables, pero además es la que indica el tipo de material del que podría estar compuesto, poniendo como objetivo la extracción de documentación centrada en la magnitud, para un siguiente proyecto, donde poder catalogar los tipos de materiales de los objetos más cercanos, y ver si sería posible la extracción, ya que hemos comenzado a enviar objetos de defensa contra los asteroides, que intentan chocar para destruirlo, como es la sonda DART, podría ser útil un proceso de extracción tanto para estudios, pues pueden haber minerales diferentes a los de la Tierra que podrían emplearse para tecnologías más sofisticadas.

In [3]:
# EXTRAEMOS EL PRIMER DATASET CON HISTÓRICO DE FECHA DE APROXIMACIÓN DE 1900 HASTA 2100
datos_tot = pd.read_csv('NEOEarthCloseApproachesA.csv')
# print(datos_tot.count())
datos_tot.head()
Out[3]:
Object                      205686
Close-Approach (CA) Date    205686
CA DistanceNominal (au)     205686
CA DistanceMinimum (au)     205686
V relative(km/s)            205686
V infinity(km/s)            205658
H(mag)                      205442
Diameter                    205472
Rarity                      205442
dtype: int64
In [3]:
#ELIMINAMOS LAS COLUMNAS QUE NO SON NECESARIAS
dat = datos_tot.drop(['CA DistanceMinimum (au)'],axis = 1)
dat = dat.drop(['V infinity(km/s)'],axis = 1)
In [4]:
# SEPARAMOS LA FECHA Y LA HORA
fecha1 = dat['Close-Approach (CA) Date'].str.split(' ', expand=True)

# CREAMOS UN GRUPO CON LA EXTRACCIÓN FECHA
fecha = fecha1[0]
hora = fecha1[1]

# CONVERTIMOS LA FECHA EN FORMATO DATETIME64
fecha = pd.to_datetime(fecha)
In [5]:
# LOS UNIMOS A NUESTRO DF PRINCIPAL Y ELIMINAMOS LA COLUMNA SIN FORMATO
dat['Fecha aprox.'] = fecha
dat['Hora aprox.'] = hora
dat=  dat.drop(['Close-Approach (CA) Date'], axis=1)
In [6]:
# EXTRAEMOS LA COLUMNA DIAMETRO Y OBJECT LA CUAL LA PONEMOS COMO ÍNDICE
DIAMETRO = pd.DataFrame(datos_tot[['Object','Diameter']])
DIAMETRO.set_index('Object',inplace=True)
DIAMETRO.head()
Out[6]:
Diameter
Object
170903 (2004 WS2) 610 m - 1.4 km
(2006 XO4) 56 m - 120 m
(2013 WU45) 220 m - 490 m
(2018 BM3) 110 m - 250 m
313552 (2003 BX33) 170 m - 380 m
In [7]:
# EXTRAEMOS DE LA COLUMNA DIAMETER AQUELLOS QUE COINCIDAN CON KM (PRIMER FORMATO)
# Utilizamos extractall que nos devolverá todas aquellas coincidencias que encuentre, al cual le decimos que nos separe los valores mediante ()
# CREAMOS NUEVA COLUMNA CON LA MEDIA ENTRE LOS INTERVALOS (KM)
A = DIAMETRO['Diameter'].str.extractall(r'(\d+.?\d+)±(\d+\.\d+) km').astype(float)
A['Media_KM'] = A[[0,1]].mean(axis=1)

# SEGUNDO FORMATO
B = DIAMETRO['Diameter'].str.extractall(r'(\d.\d+) km -  (\d.\d+) km').astype(float)
B['Media_KM'] = B[[0,1]].mean(axis=1)

# UNIMOS LOS INTERVALOS SEPARADOS POR COLUMNAS

A = A.append(B)
A['DIAMETRO_MEDIA_METROS'] = A['Media_KM'].apply(lambda i: float(i*1000))
In [8]:
# AHORA EXTRAEMOS LOS DATOS CON UNIDAD METROS
Diam_m= DIAMETRO['Diameter'].str.extractall(r'(\d\.?\d+) m -  (\d? ?\d+) m').astype(float)

Diam_m['DIAMETRO_MEDIA_METROS'] = Diam_m[[0,1]].mean(axis=1)
Diam_m.head()
Out[8]:
0 1 DIAMETRO_MEDIA_METROS
Object match
(2006 XO4) 0 56.0 120.0 88.0
(2013 WU45) 0 220.0 490.0 355.0
(2018 BM3) 0 110.0 250.0 180.0
313552 (2003 BX33) 0 170.0 380.0 275.0
417217 (2005 YS) 0 320.0 720.0 520.0
In [9]:
# AÑADIMOS AL DF DIAMETRO LAS MEDIAS EN METROS DE AMBOS
DIAMETRO = pd.DataFrame(pd.concat([A['DIAMETRO_MEDIA_METROS'],Diam_m['DIAMETRO_MEDIA_METROS']]))

# RESETEAMOS INDEX PARA QUE LOS NOMBRES DE ASTEROIDES AHORA SEAN COLUMNAS PARA PODER UNIR VALORES
DIAMETRO.reset_index()
Out[9]:
Object match DIAMETRO_MEDIA_METROS
0 4660 Nereus (1982 DB) 0 190.0
1 511684 (2015 BN509) 0 190.0
2 311554 (2006 BQ147) 0 198.5
3 388189 (2006 DS14) 0 164.5
4 504800 (2010 CO1) 0 191.5
... ... ... ...
193828 (2020 LD3) 0 330.0
193829 525498 (2005 GE60) 0 160.0
193830 (2009 LW2) 0 495.0
193831 (2016 NG15) 0 325.0
193832 (2015 XQ378) 0 62.0

193833 rows × 3 columns

In [10]:
# UNIMOS LOS DIAMETROS EN METROS A LA TABLA PRINCIPAL
dats = dat.copy()
dats = pd.merge(dat,DIAMETRO,on='Object',how='inner')
dats.drop_duplicates(inplace=True)
dats.head()
Out[10]:
Object CA DistanceNominal (au) V relative(km/s) H(mag) Diameter Rarity Fecha aprox. Hora aprox. DIAMETRO_MEDIA_METROS
0 (2006 XO4) 0.11429 7.40 23.4 56 m - 120 m 0.0 1900-01-01 03:13 ±    00:18 88.0
49 (2006 XO4) 0.19377 12.37 23.4 56 m - 120 m 0.0 1907-02-24 14:48 ±    00:03 88.0
98 (2006 XO4) 0.06225 7.72 23.4 56 m - 120 m 0.0 1909-12-15 20:15 ±    00:10 88.0
147 (2006 XO4) 0.14881 9.88 23.4 56 m - 120 m 0.0 1917-02-24 03:05 ± < 88.0
196 (2006 XO4) 0.02889 8.88 23.4 56 m - 120 m 0.0 1919-12-09 22:42 ± < 88.0
In [11]:
# CREAMOS COLUMNA CON EL VALOR DE LA DISTANCIA ASTRONOMICA EN DISTANCIA LUNAR PARA MAYOR COMPRENSIÓN
dats['LunarDistance(LD)']= dats['CA DistanceNominal (au)'].apply(lambda i: float(i*389.577688525899))

# ORDENAMOS LAS COLUMNAS 
dats = dats[['Object','Fecha aprox.','CA DistanceNominal (au)','LunarDistance(LD)','V relative(km/s)','H(mag)','Diameter','DIAMETRO_MEDIA_METROS','Rarity']]
dats
Out[11]:
Object Fecha aprox. CA DistanceNominal (au) LunarDistance(LD) V relative(km/s) H(mag) Diameter DIAMETRO_MEDIA_METROS Rarity
0 (2006 XO4) 1900-01-01 0.11429 44.524834 7.40 23.4 56 m - 120 m 88.0 0.0
49 (2006 XO4) 1907-02-24 0.19377 75.488469 12.37 23.4 56 m - 120 m 88.0 0.0
98 (2006 XO4) 1909-12-15 0.06225 24.251211 7.72 23.4 56 m - 120 m 88.0 0.0
147 (2006 XO4) 1917-02-24 0.14881 57.973056 9.88 23.4 56 m - 120 m 88.0 0.0
196 (2006 XO4) 1919-12-09 0.02889 11.254899 8.88 23.4 56 m - 120 m 88.0 0.0
... ... ... ... ... ... ... ... ... ...
4922244 (2014 YN9) 2195-12-07 0.19926 77.627250 7.42 20.9 180 m - 390 m 285.0 0.0
4922245 (2017 OU67) 2198-08-06 0.19694 76.723430 5.63 22.9 70 m - 160 m 115.0 0.0
4922246 (2018 AL2) 2199-01-26 0.18988 73.973011 5.42 24.1 40 m - 90 m 65.0 0.0
4922247 (2015 EA7) 2200-02-15 0.17774 69.243538 4.96 21.6 130 m - 280 m 205.0 0.0
4922248 (2007 RT1) 2200-09-04 0.14731 57.388689 32.09 20.6 200 m - 450 m 325.0 0.0

193833 rows × 9 columns

In [12]:
# SEPARAMOS EL DATASET EN 2 GRUPOS
# PRIMER GRUPO HISTORICO DESDE 1900 HASTA 1961
asteroides_1900_1961 = dats.loc[(dats['Fecha aprox.']<'1962')]

# SEGUNDO GRUPO HISTORICO DESDE 1962 HASTA 2022
asteroides_1962_2022 = dats.loc[(dats['Fecha aprox.']>='1962')&(dats['Fecha aprox.']<'2023')]
In [5]:
# EXTRAEMOS EL SEGUNDO DATASET SOBRE AQUELLOS ASTEROIDES CATALOGADOS COMO PELIGRO DE IMPACTO POR LA NASA
neo_risk= pd.read_csv('cneos_sentry_summary_data.csv')
neo_risk = neo_risk.drop(['Unnamed: 10'],axis=1)
neo_risk.head()
Out[5]:
Object Designation Year Range Potential Impacts Impact Probability (cumulative) Vinfinity (km/s) H (mag) Estimated Diameter (km) Palermo Scale (cum.) Palermo Scale (max.) Torino Scale (max.)
0 29075 (1950 DA) 2880-2880 1 2.900000e-05 14.10 17.9 1.300 -2.05 -2.05 NaN
1 (1979 XB) 2056-2113 4 8.500000e-07 23.76 18.5 0.660 -2.73 -3.04 0.0
2 101955 Bennu (1999 RQ36) 2178-2290 157 5.700000e-04 5.99 20.6 0.490 -1.41 -1.59 NaN
3 (2007 FT3) 2024-2119 89 8.600000e-07 17.07 20.0 0.341 -2.83 -3.09 0.0
4 (2022 UE28) 2062-2095 8 4.600000e-04 12.83 21.5 0.170 -1.54 -1.54 1.0
In [6]:
neo_risk.set_index(['Object Designation  '],inplace=True)
In [7]:
year= neo_risk['Year Range  '].str.extractall(r'(\d+)-(\d+)').astype(int)

year['YEAR'] = year[[0,1]].mean(axis=1).astype(int)
year.reset_index()
neo_risk.reset_index(inplace=True)
year=year.drop([0,1],axis=1)
In [8]:
neo_risk = pd.merge(neo_risk,year,on='Object Designation  ',how='inner')
neo_risk
Out[8]:
Object Designation Year Range Potential Impacts Impact Probability (cumulative) Vinfinity (km/s) H (mag) Estimated Diameter (km) Palermo Scale (cum.) Palermo Scale (max.) Torino Scale (max.) YEAR
0 29075 (1950 DA) 2880-2880 1 2.900000e-05 14.10 17.9 1.300 -2.05 -2.05 NaN 2880
1 (1979 XB) 2056-2113 4 8.500000e-07 23.76 18.5 0.660 -2.73 -3.04 0.0 2084
2 101955 Bennu (1999 RQ36) 2178-2290 157 5.700000e-04 5.99 20.6 0.490 -1.41 -1.59 NaN 2234
3 (2007 FT3) 2024-2119 89 8.600000e-07 17.07 20.0 0.341 -2.83 -3.09 0.0 2071
4 (2022 UE28) 2062-2095 8 4.600000e-04 12.83 21.5 0.170 -1.54 -1.54 1.0 2078
5 (2015 JJ) 2111-2111 1 2.100000e-05 10.70 22.1 0.130 -3.57 -3.57 0.0 2111
6 (2022 PX1) 2040-2040 1 3.000000e-06 35.11 22.3 0.120 -3.20 -3.20 0.0 2040
7 (2012 QD8) 2047-2120 16 6.100000e-06 20.76 23.1 0.081 -3.76 -3.84 0.0 2083
8 (2008 EX5) 2056-2093 28 5.300000e-05 9.92 23.8 0.059 -3.79 -4.07 0.0 2074
9 (2008 UB7) 2044-2101 50 3.400000e-05 18.53 23.8 0.058 -3.65 -4.27 0.0 2072
10 (2005 ED224) 2023-2064 3 2.600000e-06 24.96 24.0 0.054 -3.17 -3.18 0.0 2043
11 (2000 SB45) 2067-2118 194 1.600000e-04 7.53 24.3 0.046 -3.73 -4.20 0.0 2092
12 (2019 VB37) 2049-2067 5 5.700000e-05 14.55 24.5 0.043 -3.66 -3.66 0.0 2058
13 (2007 DX40) 2035-2122 93 7.800000e-05 15.52 24.6 0.040 -3.68 -4.07 0.0 2078
14 (2000 SG344) 2069-2122 300 2.700000e-03 1.36 24.8 0.037 -2.79 -3.14 0.0 2095
15 (2005 QK76) 2030-2059 6 7.100000e-05 19.67 25.2 0.031 -3.36 -3.48 0.0 2044
16 (2008 JL3) 2027-2122 44 1.700000e-04 8.42 25.3 0.029 -3.08 -3.08 0.0 2074
17 (2021 GX9) 2032-2052 2 8.200000e-05 16.79 25.3 0.029 -3.41 -3.41 0.0 2042
18 (2021 EU) 2024-2093 8 7.700000e-05 21.38 25.4 0.028 -3.03 -3.07 0.0 2058
19 (2013 VW13) 2063-2095 14 4.400000e-04 16.35 26.2 0.019 -3.88 -4.05 0.0 2079
20 (2022 EK4) 2057-2115 134 3.400000e-03 7.98 26.4 0.018 -3.34 -3.59 0.0 2086
21 (2012 HG2) 2052-2122 689 2.000000e-03 3.32 27.0 0.014 -3.87 -4.30 0.0 2087
22 (2020 VV) 2044-2122 424 2.300000e-03 2.58 27.3 0.012 -3.85 -4.34 0.0 2083
23 (2022 NX1) 2075-2122 122 1.200000e-02 NaN 28.0 0.008 -3.70 -3.91 0.0 2098
24 (2017 WT28) 2083-2121 113 1.200000e-02 4.47 28.1 0.008 -3.85 -3.87 0.0 2102
25 (2020 VW) 2074-2094 13 7.000000e-03 9.69 28.3 0.007 -3.84 -4.12 0.0 2084
In [19]:
import plotly.figure_factory as ff

corrs = dats.corr()

figure = ff.create_annotated_heatmap(
    z=corrs.values,
    x=list(corrs.columns),
    y=list(corrs.index),
    colorscale='Earth',
    annotation_text=corrs.round(2).values,
    showscale=True, reversescale=True)

figure.layout.margin = dict(l=200, t=200)
figure.layout.height = 800
figure.layout.width = 1000

iplot(figure)
In [20]:
df = dats.groupby(dats['Fecha aprox.'].dt.year)['Object'].aggregate(['count'])
df1= asteroides_1900_1961.groupby(asteroides_1900_1961['Fecha aprox.'].dt.year)['Object'].aggregate(['count'])
df2= asteroides_1962_2022.groupby(asteroides_1962_2022['Fecha aprox.'].dt.year)['Object'].aggregate(['count'])
df3 = asteroides_1900_1961.groupby(asteroides_1900_1961['Fecha aprox.'].dt.month)['Object'].aggregate(['count'])
df4= asteroides_1962_2022.groupby(asteroides_1962_2022['Fecha aprox.'].dt.month)['Object'].aggregate(['count']).reset_index()
In [20]:
import seaborn as sns
dats['Fecha'] = dats['Fecha aprox.'].apply(lambda x: pd.to_datetime(x).year)
df5 = dats.groupby('Fecha').count().reset_index()
plt.figure(figsize=(40,25))

p = sns.barplot(x='Fecha', y='Object', data=df5)
plt.axhline(df5['Object'].mean(), color='r', linestyle='--')
p = p.set_xticklabels(df5['Fecha'], rotation=45, ha='right', fontsize=5)
plt.title("HISTÓRICO 1900 A 2200")
plt.show()
In [ ]:
 
In [22]:
df['count'].iplot(
    kind='lines',
    xTitle='Años desde 1900 hasta 2200',
    linecolor='black',
    yTitle="NEO's por año",
    barmode = 'stack',
    title=('Histórico NEOs de 300 años'))
In [23]:
df1['count'].iplot(
    kind='lines',
    xTitle='Años desde 1900 hasta 1961',
    linecolor='black',
    yTitle="NEO's por año",
        title=('Histórico NEOs punto más cercano años 1900 a 1961'))
In [24]:
df2['count'].iplot(
    kind='lines',
    xTitle='Años desde 1962 hasta 2200',
    linecolor='black',
    yTitle="NEO's por año",
    barmode = 'stack',
    title=('Histórico NEOs punto más cercano años 1962 a 2022'))
In [142]:
import plotly.graph_objs as go
import plotly as plt
trace0 = go.Box(
    y=asteroides_1900_1961['DIAMETRO_MEDIA_METROS'],
    name = 'Diametro NEO 1900/61',
    marker = dict(
        color = 'rgb(12, 12, 140)',
    )
)
trace1 = go.Box(
    y=asteroides_1962_2022['DIAMETRO_MEDIA_METROS'],
    name = 'Diametro NEO 1962/2022',
    marker = dict(
        color = 'rgb(12, 128, 128)'),
    )
data = [trace0, trace1]
plt.offline.plot(data, filename='file.html')
iplot(data)
In [77]:
df6 = asteroides_1900_1961.groupby('H(mag)').count().reset_index()
df6.set_index('Object',inplace=True)

df7 = asteroides_1962_2022.groupby('H(mag)').count().reset_index()
df7.set_index('Object',inplace=True)
In [21]:
import plotly.express as px
import plotly as plt
fig = px.scatter(asteroides_1900_1961, x="CA DistanceNominal (au)",y ='V relative(km/s)',size='DIAMETRO_MEDIA_METROS', color='H(mag)',title='NEOS 1900 A 1962 MEDIDO POR DISTANCIA Y VELOCIDAD',color_continuous_scale='bluered')
plt.offline.plot(fig, filename='NEOS 1900 1962.html')
fig.show()
In [88]:
import plotly.express as px
import plotly as plt
fig = px.scatter(asteroides_1962_2022, x="CA DistanceNominal (au)",y ='V relative(km/s)',size='DIAMETRO_MEDIA_METROS', color='H(mag)',title='NEOS 1962 A 2022 MEDIDO POR DISTANCIA Y VELOCIDAD',color_continuous_scale='bluered')
plt.offline.plot(fig, filename='NEOS 1962 2022.html')
fig.show()
In [90]:
plot.figure(figsize=(12,8))
sns.scatterplot(x=asteroides_1900_1961['CA DistanceNominal (au)'],
                y=asteroides_1900_1961['V relative(km/s)'],
                hue = asteroides_1900_1961['DIAMETRO_MEDIA_METROS'],
               );
In [91]:
plot.figure(figsize=(12,8))
sns.scatterplot(x=asteroides_1962_2022['CA DistanceNominal (au)'],
                y=asteroides_1962_2022['V relative(km/s)'],
                hue = asteroides_1962_2022['DIAMETRO_MEDIA_METROS'],
                
               );
In [75]:
import plotly.express as px

fig = px.histogram(asteroides_1900_1961['H(mag)'], x="H(mag)",
                   title='Histogram of H(mag) Neo 1900 - 1961',
                   labels={'H(mag)':'H(mag)'}, # can specify one label per df column
                   opacity=0.8,
                   log_y=True, # represent bars with log scale
                   # color of histogram bars
                   )
fig.show()
In [ ]:
import plotly.express as px

fig = px.histogram(asteroides_1962_2022['H(mag)'], x="H(mag)",
                   title='Histogram of H(mag) Neo 1900 - 1961',
                   labels={'H(mag)':'H(mag)'}, # can specify one label per df column
                   opacity=0.8,
                   log_y=True, # represent bars with log scale
                   # color of histogram bars
                   )
fig.show()
In [ ]:
import plotly.express as px
import plotly as plt
fig = px.scatter(dats, x="CA DistanceNominal (au)",y ='V relative(km/s)',size='DIAMETRO_MEDIA_METROS', color="Rarity",title='Nivel rareza NEO por diametro/velocidad',color_continuous_scale='bluered')
plt.offline.plot(fig, filename='rareza.html')
fig.show()
In [22]:
import plotly.figure_factory as ff

corrs = neo_risk.corr()

figure = ff.create_annotated_heatmap(
    z=corrs.values,
    x=list(corrs.columns),
    y=list(corrs.index),
    colorscale='magma',
    annotation_text=corrs.round(2).values,
    showscale=True, reversescale=True)

figure.layout.margin = dict(l=200, t=200)
figure.layout.height = 800
figure.layout.width = 1000

plt.offline.plot(figure, filename='neoriskheat.html')
iplot(figure)

neo_risk.columns

In [25]:
import plotly.express as px
import plotly as plt
fig = px.scatter(neo_risk, x="YEAR",y ='Vinfinity (km/s)',size='Estimated Diameter (km)',color="Palermo Scale (max.)",title="Neo's con riesgo",color_continuous_scale='sunset')
plt.offline.plot(fig, filename='neorisk.html')
fig.show()
In [ ]:
neo_risk.sort_values('Palermo Scale (max.)',ascending=False)
In [70]:
df = neo_risk[neo_risk['Palermo Scale (max.)'] > -3 ]
df.columns
Out[70]:
Index(['Object Designation  ', 'Year Range  ', 'Potential Impacts  ',
       'Impact Probability (cumulative)', 'Vinfinity (km/s)', 'H (mag)',
       'Estimated Diameter (km)', 'Palermo Scale (cum.)',
       'Palermo Scale (max.)', 'Torino Scale (max.)', 'YEAR'],
      dtype='object')
In [74]:
import plotly.figure_factory as ff
import plotly.express as px
import plotly as plt
figure = ff.create_scatterplotmatrix(
    neo_risk[['Potential Impacts  ', 'Estimated Diameter (km)', 'Palermo Scale (max.)', 'H (mag)','Vinfinity (km/s)']],
    height=1000,
    width=1000,
    text=df['Object Designation  '],
    diag='histogram',
    title="COMPARACIONES NEOS RISK"
    
    )
plt.offline.plot(figure, filename='scatterrisk3.html')
iplot(figure)